<?php

namespace addons\qingdong\model;


use think\Exception;
use think\Model;
use traits\model\SoftDelete;
use addons\qingdong\library\Ku;
/**
 *联系人表
 */
class Contacts Extends Model {
	use SoftDelete;
    // 表名,不含前缀
    protected $name = 'qingdong_contacts';
	// 开启自动写入时间戳字段
	protected $autoWriteTimestamp = 'int';
	// 定义时间戳字段名
	protected $createTime = 'createtime';
	protected $updateTime = 'updatetime';
	protected $deleteTime = 'deletetime';
	protected $field = true;

	//客户
	public function customer() {
		return $this->hasOne(Customer::class, 'id', 'customer_id')->field('id,name,follow');
	}


	//负责人
	public function ownerStaff() {
		return $this->hasOne(Staff::class, 'id', 'owner_staff_id')->field('id,name');
	}


	/**
	 *
	 */
	public static function getList() {
		return self::where(['owner_staff_id'=>['in',Staff::getMyStaffIds()]])->field('id,name')->select();
	}


	//创建联系人
	public static function createContacts($params) {
		//自定义字段
		$other = [];
		foreach ($params as $name => $val) {
			if (strstr( $name,'other_') !== false) {
                if(is_array($val)){
                    $other[$name] = implode(',',$val);
                }else{
                    $other[$name] = $val;
                }
				unset($params[$name]);
			}else{
                if(empty($params[$name])){
                    $params[$name]=NULL;
                }
            }
		}
		$staff                     = Staff::info();
		if($staff){
			$params['create_staff_id'] = $staff->id;
            $owner_staff_id = $staff->id;
			if($params['customer_id']){
			    $owner_staff_id = Customer::where(array('id'=>$params['customer_id']))->value('owner_staff_id');
            }
			$params['owner_staff_id']  = $owner_staff_id;
		}

		$model = new self;
        $result = $model->allowField(true)->save($params);
		if (false === $result) {
			// 验证失败 输出错误信息
			throw new Exception($model->getError());
		}
		$lastId=$model->getLastInsID();

		$otherModel = new ContactsOther();
		if ($otherModel->save(['id' => $lastId, 'otherdata' => json_encode($other, JSON_UNESCAPED_UNICODE)]) === false) {
			// 验证失败 输出错误信息
			throw new Exception($otherModel->getError());
		}

		//创建日志
		OperationLog::createLog(OperationLog::CONTACTS_TYPE,$lastId, '创建联系人');
		//新增跟进记录
		Record::quickCreateRecord(Record::CUSTOMER_TYPE, $params['customer_id'], '新增联系人：' . $params['name']);
        OperationLog::createLog(OperationLog::CUSTOMER_TYPE, $params['customer_id'], '新增联系人：' . $params['name']);
        //同步数据
        $ku = new Ku();
        $params['contacts_id'] = $lastId;
        $ku->addCustomer($params);
		return $lastId;
	}


	//修改联系人
	public static function updateContacts($params) {
		//自定义字段
		$other = [];
		foreach ($params as $name => $val) {
			if (strstr($name,'other_') !== false) {
                if(is_array($val)){
                    $other[$name] = implode(',',$val);
                }else{
                    $other[$name] = $val;
                }
				unset($params[$name]);
			}else{
                if(empty($params[$name])){
                    $params[$name]=NULL;
                }
            }
		}

		$model = new self;
		// 调用当前模型对应的User验证器类进行数据验证
		$result = $model->save($params, ['id' => $params['id']]);
		if (false === $result) {
			// 验证失败 输出错误信息
			throw new Exception($model->getError());
		}

		$otherModel = new ContactsOther();
		if ($otherModel->save(['otherdata' => json_encode($other, JSON_UNESCAPED_UNICODE)],['id' => $params['id']]) === false) {
			// 验证失败 输出错误信息
			throw new Exception($otherModel->getError());
		}
		return true;
	}

	//导入
	public static function importContacts($data) {
		$addContacts = [];
		$addOther     = [];
		foreach ($data as $params) {
			//自定义字段
			$other = [];
			foreach ($params as $name => $val) {
				if (strstr($name, 'other_') !== false) {
                    if(is_array($val)){
                        $other[$name] = implode(',',$val);
                    }else{
                        $other[$name] = $val;
                    }
					unset($params[$name]);
				}else{
                    if(empty($params[$name])){
                        $params[$name]=NULL;
                    }
                }
			}
            $params['createtime'] = time();
            $params['next_time']   = date('Y-m-d H:i:s');
			$other['id']           = $params['id'];
			$addOther[]            = ['id' => $params['id'], 'otherdata' => json_encode($other, JSON_UNESCAPED_UNICODE)];
			$addContacts[]        = $params;
		}

		$model = new self;
		// 调用当前模型对应的User验证器类进行数据验证
		$result = $model->allowField(true)->insertAll($addContacts);

		$otherModel = new ContactsOther();
		$otherModel->allowField(true)->insertAll($addOther);

		return true;
	}

    //获取联系人相关信息
    public function contactsOther() {
        return $this->belongsTo(ContactsOther::class,'id','id');
    }

    public function getUpdatetimeAttr($value) {
        if ($value) {
            return date('Y-m-d H:i', $value);
        }

        return $value;
    }
}
